<%  
	/*@ 扩展对象的形态方法 */
	Object.extend
	(
		Function,
		{
			//->执行传入函数
			execute:function()
			{
				if(arguments.length>0)
				{
					for(var iarguments=0;iarguments<=arguments.length-1;iarguments++){				
						if(Object.isFunction(arguments[iarguments])) arguments[iarguments]();
					}
				}
			}
		}
	);
	/*@ 扩展对象的原型方法 */
	Object.extend
	(
		Function.prototype,
		{
			argumentNames:function() 
			{
				var names=this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
				return (names.length==1&&names[0]==undefined) ? []:names;
			},
			bind:function() 
			{
				if(arguments.length<2&&arguments[0]===undefined)
				{
					return this;
				}
				var __method=this,args=$A(arguments),object=args.shift();
				return function()
				{					
					return __method.apply(object,args.concat($A(arguments)));
				}
			},
			/*
			bindAsEventListener:function() 
			{
				var __method=this,args=$A(arguments),object=args.shift();
				return function($event) 
				{	
					//对象,事件,参数
					return __method.apply(object,[$event||window.event].concat(args));
				}
			},
			*/
			curry:function() 
			{
				if(!arguments.length) return this;
				var __method=this,args=$A(arguments);
				return function() 
				{
					return __method.apply(this,args.concat($A(arguments)));
				}
			},	
			methodize:function() 
			{
				if(this._methodized) return this._methodized;
				var __method=this;
				return this._methodized=function() 
				{
					return __method.apply(null, [this].concat($A(arguments)));
				};
			},			
			wrap:function($wrapper) 
			{
				var __method=this;
				return function()
				{
					return $wrapper.apply(this,[__method.bind(this)].concat($A(arguments)));
				}
			}
		}
	);
%>